{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Rental Listing Inquiries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 模型训练：超参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据读取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.read_csv('RentListingInquries_FE_train.csv')\n",
    "test=pd.read_csv('RentListingInquries_FE_test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# drop ids and get labels\n",
    "y_train = train['interest_level']\n",
    "train = train.drop(['interest_level'], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### a) 初步确定弱学习器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best n_estimators is 262.000000\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1dc80819978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "print('Best n_estimators is %f' % cvresult.shape[0])\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1dc80791fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### b) 对树的最大深度（可选）和min_children_weight进行调优（可选）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)}"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=1, missing=None, n_estimators=262,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.3),\n",
       "       fit_params=None, iid=True, n_jobs=-1,\n",
       "       param_grid={'max_depth': range(3, 10, 2), 'min_child_weight': range(1, 6, 2)},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=262,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "gsearch2 = GridSearchCV(xgb2, param_grid = param_test2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2.fit(X_train , y_train)\n",
    "\n",
    "#gsearch2.grid_scores_, gsearch2.best_params_,     gsearch2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59926, std: 0.00292, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.59952, std: 0.00299, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.59944, std: 0.00323, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.58811, std: 0.00424, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.58896, std: 0.00400, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.58847, std: 0.00338, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.59106, std: 0.00310, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.59040, std: 0.00371, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.58981, std: 0.00409, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.60885, std: 0.00390, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.60355, std: 0.00539, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.59902, std: 0.00378, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.5881102494960894)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2.grid_scores_, gsearch2.best_params_,     gsearch2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([193.9387692 , 187.96510935, 187.60426855, 288.13188806,\n",
       "        286.573248  , 288.76050644, 386.62655067, 385.57244821,\n",
       "        385.94209571, 491.59292841, 485.41300941, 453.29079332]),\n",
       " 'mean_score_time': array([0.75250249, 0.71507773, 0.73789301, 1.28005347, 1.31147485,\n",
       "        1.24883332, 3.35063386, 3.19913392, 3.10847268, 5.59753242,\n",
       "        5.20066729, 3.54196301]),\n",
       " 'mean_test_score': array([-0.5992615 , -0.59951614, -0.5994386 , -0.58811025, -0.58896035,\n",
       "        -0.5884718 , -0.59106137, -0.59039744, -0.58981151, -0.60884628,\n",
       "        -0.60354884, -0.59901542]),\n",
       " 'mean_train_score': array([-0.57269462, -0.57386817, -0.57419441, -0.50028358, -0.50656433,\n",
       "        -0.51018772, -0.38713335, -0.410633  , -0.42509775, -0.25662687,\n",
       "        -0.30542696, -0.33499956]),\n",
       " 'param_max_depth': masked_array(data=[3, 3, 3, 5, 5, 5, 7, 7, 7, 9, 9, 9],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_min_child_weight': masked_array(data=[1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([ 8, 10,  9,  1,  3,  2,  6,  5,  4, 12, 11,  7]),\n",
       " 'split0_test_score': array([-0.59478605, -0.59483154, -0.59425596, -0.58029482, -0.58203892,\n",
       "        -0.58233462, -0.58560875, -0.58442293, -0.58335644, -0.60281977,\n",
       "        -0.59727582, -0.59390301]),\n",
       " 'split0_train_score': array([-0.57424078, -0.57556479, -0.57559939, -0.50114067, -0.5087983 ,\n",
       "        -0.5125472 , -0.3894005 , -0.4127558 , -0.42794278, -0.25798524,\n",
       "        -0.30667988, -0.33534274]),\n",
       " 'split1_test_score': array([-0.59848482, -0.59817931, -0.59829377, -0.58723939, -0.58691   ,\n",
       "        -0.58811675, -0.59030281, -0.58938168, -0.58780881, -0.60663818,\n",
       "        -0.59812542, -0.59810292]),\n",
       " 'split1_train_score': array([-0.57326158, -0.57396745, -0.57461411, -0.50080269, -0.5073554 ,\n",
       "        -0.51007898, -0.38714471, -0.41079589, -0.42438721, -0.2544797 ,\n",
       "        -0.30482126, -0.33495998]),\n",
       " 'split2_test_score': array([-0.59869033, -0.59929206, -0.59899346, -0.58977888, -0.59148009,\n",
       "        -0.58875403, -0.59172911, -0.59268946, -0.59011548, -0.61126114,\n",
       "        -0.60413511, -0.59956899]),\n",
       " 'split2_train_score': array([-0.5727665 , -0.57388223, -0.57369923, -0.50037615, -0.50593683,\n",
       "        -0.51019817, -0.38596459, -0.40911298, -0.42407026, -0.25574066,\n",
       "        -0.30567942, -0.33400293]),\n",
       " 'split3_test_score': array([-0.60369711, -0.60343763, -0.60353864, -0.59114031, -0.59162622,\n",
       "        -0.59150985, -0.59282951, -0.5899217 , -0.59240026, -0.60929209,\n",
       "        -0.60640507, -0.59792897]),\n",
       " 'split3_train_score': array([-0.57233315, -0.57362564, -0.57419051, -0.50087883, -0.50661324,\n",
       "        -0.51014326, -0.38598287, -0.40965445, -0.42349968, -0.25589909,\n",
       "        -0.30465002, -0.33513045]),\n",
       " 'split4_test_score': array([-0.60064963, -0.60184086, -0.602112  , -0.59209907, -0.59274767,\n",
       "        -0.59164469, -0.59483782, -0.59557301, -0.59537823, -0.61422187,\n",
       "        -0.61180528, -0.60557519]),\n",
       " 'split4_train_score': array([-0.57087108, -0.57230075, -0.5728688 , -0.49821959, -0.50411787,\n",
       "        -0.507971  , -0.38717409, -0.41084586, -0.42558883, -0.25902967,\n",
       "        -0.30530423, -0.33556169]),\n",
       " 'std_fit_time': array([ 3.17801206,  2.04507469,  2.01804333,  2.62827656,  5.38410824,\n",
       "         4.07666771,  2.52861486,  2.66412195,  3.00121097,  1.45635123,\n",
       "         2.47601614, 29.99215813]),\n",
       " 'std_score_time': array([0.03801588, 0.01013782, 0.02068786, 0.03100095, 0.09904184,\n",
       "        0.03844515, 0.23920189, 0.2748252 , 0.19444602, 0.05717771,\n",
       "        0.04707415, 1.26949545]),\n",
       " 'std_test_score': array([0.00291763, 0.00298551, 0.00323503, 0.00423595, 0.00399776,\n",
       "        0.00338136, 0.00310286, 0.00371453, 0.00408551, 0.00390173,\n",
       "        0.00539301, 0.00378095]),\n",
       " 'std_train_score': array([0.00111114, 0.00103963, 0.00091133, 0.00106085, 0.00154905,\n",
       "        0.00144879, 0.00125151, 0.00125269, 0.00157796, 0.00164584,\n",
       "        0.00072376, 0.00053772])}"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588110 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cfc379e240>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2.best_score_, gsearch2.best_params_))\n",
    "test_means = gsearch2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "经过精细的调整max_depth和min_child_weight，我们发现网格搜索的最后返回给我们的还是{'max_depth': 5, 'min_child_weight': 1}这一组参数最好。所以，我们就可以直接用这组参数调整其他的参数了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### c) 重新调整弱学习器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 9\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print(cvresult)\n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds4_2_3_699.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators4_2_3_699.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     test-mlogloss-mean  test-mlogloss-std  train-mlogloss-mean  \\\n",
      "0              1.957133           0.000806             1.955564   \n",
      "1              1.785371           0.000738             1.782810   \n",
      "2              1.649457           0.000877             1.645860   \n",
      "3              1.537327           0.000630             1.532956   \n",
      "4              1.443652           0.000704             1.438471   \n",
      "5              1.363638           0.000796             1.357667   \n",
      "6              1.294293           0.001085             1.287640   \n",
      "7              1.232981           0.001594             1.225572   \n",
      "8              1.179006           0.001369             1.170946   \n",
      "9              1.131588           0.001206             1.122793   \n",
      "10             1.088893           0.001598             1.079478   \n",
      "11             1.050902           0.001835             1.040914   \n",
      "12             1.016637           0.001695             1.005948   \n",
      "13             0.985869           0.001625             0.974638   \n",
      "14             0.957703           0.001723             0.945891   \n",
      "15             0.931880           0.001742             0.919463   \n",
      "16             0.908832           0.001927             0.895907   \n",
      "17             0.887379           0.002267             0.873983   \n",
      "18             0.868349           0.002371             0.854222   \n",
      "19             0.850711           0.002408             0.835976   \n",
      "20             0.834507           0.002194             0.819263   \n",
      "21             0.819644           0.002193             0.803943   \n",
      "22             0.805978           0.002267             0.789811   \n",
      "23             0.793243           0.002420             0.776509   \n",
      "24             0.781688           0.002520             0.764411   \n",
      "25             0.770958           0.002569             0.753116   \n",
      "26             0.761290           0.002604             0.743006   \n",
      "27             0.751867           0.002462             0.733161   \n",
      "28             0.743439           0.002356             0.724189   \n",
      "29             0.735403           0.002307             0.715724   \n",
      "..                  ...                ...                  ...   \n",
      "232            0.592600           0.002759             0.496520   \n",
      "233            0.592556           0.002832             0.496188   \n",
      "234            0.592536           0.002818             0.495802   \n",
      "235            0.592439           0.002840             0.495503   \n",
      "236            0.592489           0.002768             0.495215   \n",
      "237            0.592489           0.002742             0.494903   \n",
      "238            0.592570           0.002697             0.494556   \n",
      "239            0.592550           0.002628             0.494198   \n",
      "240            0.592512           0.002619             0.493845   \n",
      "241            0.592448           0.002560             0.493494   \n",
      "242            0.592495           0.002538             0.493088   \n",
      "243            0.592484           0.002461             0.492752   \n",
      "244            0.592437           0.002456             0.492473   \n",
      "245            0.592441           0.002523             0.492138   \n",
      "246            0.592387           0.002481             0.491829   \n",
      "247            0.592392           0.002438             0.491461   \n",
      "248            0.592386           0.002416             0.491183   \n",
      "249            0.592327           0.002422             0.490847   \n",
      "250            0.592271           0.002408             0.490499   \n",
      "251            0.592219           0.002351             0.490203   \n",
      "252            0.592201           0.002343             0.489855   \n",
      "253            0.592275           0.002328             0.489567   \n",
      "254            0.592302           0.002308             0.489270   \n",
      "255            0.592350           0.002327             0.488964   \n",
      "256            0.592351           0.002347             0.488727   \n",
      "257            0.592286           0.002395             0.488331   \n",
      "258            0.592213           0.002340             0.487989   \n",
      "259            0.592138           0.002422             0.487649   \n",
      "260            0.592183           0.002366             0.487297   \n",
      "261            0.592108           0.002417             0.486961   \n",
      "\n",
      "     train-mlogloss-std  \n",
      "0              0.001335  \n",
      "1              0.001322  \n",
      "2              0.001608  \n",
      "3              0.001598  \n",
      "4              0.001036  \n",
      "5              0.001235  \n",
      "6              0.001137  \n",
      "7              0.001375  \n",
      "8              0.001241  \n",
      "9              0.001086  \n",
      "10             0.000844  \n",
      "11             0.000733  \n",
      "12             0.000848  \n",
      "13             0.000990  \n",
      "14             0.001057  \n",
      "15             0.001098  \n",
      "16             0.000886  \n",
      "17             0.000654  \n",
      "18             0.000639  \n",
      "19             0.000680  \n",
      "20             0.000902  \n",
      "21             0.000854  \n",
      "22             0.000853  \n",
      "23             0.000680  \n",
      "24             0.000555  \n",
      "25             0.000624  \n",
      "26             0.000723  \n",
      "27             0.000913  \n",
      "28             0.001159  \n",
      "29             0.001195  \n",
      "..                  ...  \n",
      "232            0.001152  \n",
      "233            0.001211  \n",
      "234            0.001239  \n",
      "235            0.001236  \n",
      "236            0.001221  \n",
      "237            0.001139  \n",
      "238            0.001111  \n",
      "239            0.001138  \n",
      "240            0.001158  \n",
      "241            0.001214  \n",
      "242            0.001201  \n",
      "243            0.001227  \n",
      "244            0.001202  \n",
      "245            0.001274  \n",
      "246            0.001236  \n",
      "247            0.001290  \n",
      "248            0.001221  \n",
      "249            0.001227  \n",
      "250            0.001221  \n",
      "251            0.001270  \n",
      "252            0.001254  \n",
      "253            0.001208  \n",
      "254            0.001228  \n",
      "255            0.001242  \n",
      "256            0.001171  \n",
      "257            0.001185  \n",
      "258            0.001199  \n",
      "259            0.001218  \n",
      "260            0.001224  \n",
      "261            0.001233  \n",
      "\n",
      "[262 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.5100170339835647\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cfc37f7d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(6,4)\n",
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=262,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb2_3, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cf800a1e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best n_estimators is 162.000000\n"
     ]
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('my_preds4_2_3_699.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail4_2_3_699.png' )\n",
    "\n",
    "pyplot.show()\n",
    "print('Best n_estimators is %f' % cvresult.shape[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### e) 行列重采样参数调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59358, std: 0.00369, params: {'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  mean: -0.59139, std: 0.00387, params: {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  mean: -0.59005, std: 0.00323, params: {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  mean: -0.58938, std: 0.00287, params: {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  mean: -0.58964, std: 0.00297, params: {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  mean: -0.58901, std: 0.00278, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.59233, std: 0.00390, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.59091, std: 0.00381, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.58941, std: 0.00396, params: {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  mean: -0.58912, std: 0.00385, params: {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  mean: -0.58875, std: 0.00374, params: {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  mean: -0.58883, std: 0.00374, params: {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  mean: -0.59151, std: 0.00418, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.59108, std: 0.00434, params: {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  mean: -0.59012, std: 0.00402, params: {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  mean: -0.58904, std: 0.00364, params: {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  mean: -0.58878, std: 0.00355, params: {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  mean: -0.58865, std: 0.00320, params: {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  mean: -0.59089, std: 0.00418, params: {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  mean: -0.59055, std: 0.00405, params: {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  mean: -0.58932, std: 0.00345, params: {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  mean: -0.58859, std: 0.00387, params: {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  mean: -0.58794, std: 0.00359, params: {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  mean: -0.58805, std: 0.00360, params: {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       " -0.5879396335999502)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=162,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### d) 对正则参数进行调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58811, std: 0.00375, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58795, std: 0.00379, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58825, std: 0.00369, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58787, std: 0.00359, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58779, std: 0.00369, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58872, std: 0.00364, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 2, 'reg_lambda': 1},\n",
       " -0.5877858345792174)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=162,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([247.46997948, 245.12221394, 247.52341514, 247.47358203,\n",
       "        246.07384882, 674.85924811]),\n",
       " 'mean_score_time': array([0.83095455, 0.80593839, 0.82394948, 0.80113506, 0.82274981,\n",
       "        0.74109392]),\n",
       " 'mean_test_score': array([-0.5881128 , -0.58795391, -0.58825385, -0.58786786, -0.58778583,\n",
       "        -0.58872341]),\n",
       " 'mean_train_score': array([-0.52963167, -0.53031806, -0.53271367, -0.53130823, -0.53229948,\n",
       "        -0.53423476]),\n",
       " 'param_reg_alpha': masked_array(data=[1.5, 1.5, 1.5, 2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.5, 1, 2, 0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([4, 3, 5, 2, 1, 6]),\n",
       " 'split0_test_score': array([-0.58171165, -0.58162376, -0.58203877, -0.58171683, -0.58196642,\n",
       "        -0.58261715]),\n",
       " 'split0_train_score': array([-0.53055275, -0.53112413, -0.53359512, -0.53222102, -0.53341109,\n",
       "        -0.5351754 ]),\n",
       " 'split1_test_score': array([-0.58663043, -0.5865141 , -0.58692356, -0.58635486, -0.58603928,\n",
       "        -0.58729074]),\n",
       " 'split1_train_score': array([-0.52914305, -0.53034475, -0.5321475 , -0.53061415, -0.53172971,\n",
       "        -0.53424019]),\n",
       " 'split2_test_score': array([-0.58869655, -0.58813424, -0.5884092 , -0.58864374, -0.58747257,\n",
       "        -0.58893553]),\n",
       " 'split2_train_score': array([-0.52924657, -0.52940701, -0.53202826, -0.5312875 , -0.53135146,\n",
       "        -0.53368896]),\n",
       " 'split3_test_score': array([-0.59182439, -0.59232754, -0.59239344, -0.59135944, -0.5919909 ,\n",
       "        -0.59237268]),\n",
       " 'split3_train_score': array([-0.53064472, -0.5309884 , -0.53362544, -0.53160443, -0.53297141,\n",
       "        -0.53444482]),\n",
       " 'split4_test_score': array([-0.59170207, -0.59117089, -0.59150529, -0.59126547, -0.59146112,\n",
       "        -0.59240206]),\n",
       " 'split4_train_score': array([-0.52857128, -0.52972601, -0.53217202, -0.53081405, -0.53203375,\n",
       "        -0.53362442]),\n",
       " 'std_fit_time': array([1.80873649e+00, 4.22638527e-01, 1.60219023e+00, 1.65825952e+00,\n",
       "        4.63684180e-01, 5.24775614e+02]),\n",
       " 'std_score_time': array([0.02823634, 0.03374879, 0.02314673, 0.00659483, 0.02550756,\n",
       "        0.07161774]),\n",
       " 'std_test_score': array([0.00374625, 0.00378563, 0.00369134, 0.00359059, 0.00369336,\n",
       "        0.0036396 ]),\n",
       " 'std_train_score': array([0.00082294, 0.00067533, 0.00073376, 0.00057399, 0.00077216,\n",
       "        0.00056557])}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.587786 using {'reg_alpha': 2, 'reg_lambda': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x29a1101c358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 调用模型进行测试"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据参数调优，生成最终的模型，然后进行训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "#参数调优结果\n",
    "xgb_final =  XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=162,  \n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.9,\n",
    "        reg_alpha=2,\n",
    "        reg_lambda=1,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#训练\n",
    "\n",
    "xgb_final.fit(X_train,y_train,eval_metric='mlogloss')\n",
    "\n",
    "train_predprob = xgb_final.predict_proba(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.09366234, 0.2637799 , 0.64255774],\n",
       "       [0.00370685, 0.02832881, 0.9679643 ],\n",
       "       [0.04915973, 0.31909916, 0.63174105],\n",
       "       ...,\n",
       "       [0.02806511, 0.1687107 , 0.8032242 ],\n",
       "       [0.00218965, 0.02026818, 0.97754216],\n",
       "       [0.06795606, 0.26719704, 0.6648469 ]], dtype=float32)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_predprob"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train : 0.5390942837022533\n"
     ]
    }
   ],
   "source": [
    "logloss_train = log_loss(y_train, train_predprob)\n",
    "#Print model report:\n",
    "print(\"logloss of train :\",logloss_train )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 生成测试结果文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test = pd.read_csv(\"RentListingInquries_FE_test.csv\")\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# eval model\n",
    "test_prediction = xgb_final.predict_proba(np.array(test))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(74659, 227)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.10839366, 0.38113984, 0.5104665 ],\n",
       "       [0.2708817 , 0.39129445, 0.3378238 ],\n",
       "       [0.04151039, 0.09314237, 0.86534727],\n",
       "       ...,\n",
       "       [0.06684189, 0.3196993 , 0.6134588 ],\n",
       "       [0.46665728, 0.42364052, 0.10970221],\n",
       "       [0.04931888, 0.34570202, 0.60497916]], dtype=float32)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "submission = pd.DataFrame(columns=['0','1','2'],data=test_prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.108394</td>\n",
       "      <td>0.381140</td>\n",
       "      <td>0.510467</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.270882</td>\n",
       "      <td>0.391294</td>\n",
       "      <td>0.337824</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.041510</td>\n",
       "      <td>0.093142</td>\n",
       "      <td>0.865347</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.073502</td>\n",
       "      <td>0.339326</td>\n",
       "      <td>0.587173</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.079575</td>\n",
       "      <td>0.269224</td>\n",
       "      <td>0.651201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.010740</td>\n",
       "      <td>0.048093</td>\n",
       "      <td>0.941167</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.037427</td>\n",
       "      <td>0.327204</td>\n",
       "      <td>0.635369</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.138476</td>\n",
       "      <td>0.528981</td>\n",
       "      <td>0.332543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.087125</td>\n",
       "      <td>0.379153</td>\n",
       "      <td>0.533722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.042589</td>\n",
       "      <td>0.292906</td>\n",
       "      <td>0.664505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.008407</td>\n",
       "      <td>0.046131</td>\n",
       "      <td>0.945462</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.064195</td>\n",
       "      <td>0.449537</td>\n",
       "      <td>0.486268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.051024</td>\n",
       "      <td>0.322425</td>\n",
       "      <td>0.626550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.015045</td>\n",
       "      <td>0.043744</td>\n",
       "      <td>0.941211</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.012894</td>\n",
       "      <td>0.090949</td>\n",
       "      <td>0.896157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.011549</td>\n",
       "      <td>0.126299</td>\n",
       "      <td>0.862152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.122259</td>\n",
       "      <td>0.418676</td>\n",
       "      <td>0.459065</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0.001107</td>\n",
       "      <td>0.010857</td>\n",
       "      <td>0.988036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0.017104</td>\n",
       "      <td>0.090152</td>\n",
       "      <td>0.892744</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.120784</td>\n",
       "      <td>0.438369</td>\n",
       "      <td>0.440847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0.052008</td>\n",
       "      <td>0.285773</td>\n",
       "      <td>0.662220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0.021187</td>\n",
       "      <td>0.145241</td>\n",
       "      <td>0.833572</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0.088418</td>\n",
       "      <td>0.324578</td>\n",
       "      <td>0.587004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.291211</td>\n",
       "      <td>0.476145</td>\n",
       "      <td>0.232644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0.011079</td>\n",
       "      <td>0.202362</td>\n",
       "      <td>0.786559</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0.167680</td>\n",
       "      <td>0.578880</td>\n",
       "      <td>0.253440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0.022055</td>\n",
       "      <td>0.158018</td>\n",
       "      <td>0.819928</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0.279957</td>\n",
       "      <td>0.412514</td>\n",
       "      <td>0.307529</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0.061369</td>\n",
       "      <td>0.327278</td>\n",
       "      <td>0.611353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0.141482</td>\n",
       "      <td>0.333554</td>\n",
       "      <td>0.524964</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74629</th>\n",
       "      <td>0.177090</td>\n",
       "      <td>0.415340</td>\n",
       "      <td>0.407570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74630</th>\n",
       "      <td>0.186521</td>\n",
       "      <td>0.431544</td>\n",
       "      <td>0.381936</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74631</th>\n",
       "      <td>0.080366</td>\n",
       "      <td>0.285423</td>\n",
       "      <td>0.634211</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74632</th>\n",
       "      <td>0.010713</td>\n",
       "      <td>0.118422</td>\n",
       "      <td>0.870864</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74633</th>\n",
       "      <td>0.010728</td>\n",
       "      <td>0.184845</td>\n",
       "      <td>0.804427</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74634</th>\n",
       "      <td>0.008012</td>\n",
       "      <td>0.058147</td>\n",
       "      <td>0.933841</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74635</th>\n",
       "      <td>0.082899</td>\n",
       "      <td>0.209124</td>\n",
       "      <td>0.707976</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74636</th>\n",
       "      <td>0.003951</td>\n",
       "      <td>0.026332</td>\n",
       "      <td>0.969717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74637</th>\n",
       "      <td>0.100112</td>\n",
       "      <td>0.335266</td>\n",
       "      <td>0.564622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74638</th>\n",
       "      <td>0.026907</td>\n",
       "      <td>0.103460</td>\n",
       "      <td>0.869634</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74639</th>\n",
       "      <td>0.012421</td>\n",
       "      <td>0.035331</td>\n",
       "      <td>0.952249</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74640</th>\n",
       "      <td>0.004457</td>\n",
       "      <td>0.027829</td>\n",
       "      <td>0.967714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74641</th>\n",
       "      <td>0.176184</td>\n",
       "      <td>0.360439</td>\n",
       "      <td>0.463377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74642</th>\n",
       "      <td>0.043851</td>\n",
       "      <td>0.229294</td>\n",
       "      <td>0.726855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74643</th>\n",
       "      <td>0.028191</td>\n",
       "      <td>0.333683</td>\n",
       "      <td>0.638126</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74644</th>\n",
       "      <td>0.006335</td>\n",
       "      <td>0.076253</td>\n",
       "      <td>0.917412</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74645</th>\n",
       "      <td>0.405173</td>\n",
       "      <td>0.416341</td>\n",
       "      <td>0.178487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74646</th>\n",
       "      <td>0.020205</td>\n",
       "      <td>0.189699</td>\n",
       "      <td>0.790097</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74647</th>\n",
       "      <td>0.088749</td>\n",
       "      <td>0.330310</td>\n",
       "      <td>0.580940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74648</th>\n",
       "      <td>0.133337</td>\n",
       "      <td>0.481995</td>\n",
       "      <td>0.384668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74649</th>\n",
       "      <td>0.267125</td>\n",
       "      <td>0.545521</td>\n",
       "      <td>0.187354</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74650</th>\n",
       "      <td>0.380346</td>\n",
       "      <td>0.452357</td>\n",
       "      <td>0.167297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74651</th>\n",
       "      <td>0.006397</td>\n",
       "      <td>0.042903</td>\n",
       "      <td>0.950700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74652</th>\n",
       "      <td>0.042710</td>\n",
       "      <td>0.108668</td>\n",
       "      <td>0.848622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74653</th>\n",
       "      <td>0.002124</td>\n",
       "      <td>0.022387</td>\n",
       "      <td>0.975489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74654</th>\n",
       "      <td>0.037106</td>\n",
       "      <td>0.139687</td>\n",
       "      <td>0.823207</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74655</th>\n",
       "      <td>0.003689</td>\n",
       "      <td>0.023418</td>\n",
       "      <td>0.972893</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74656</th>\n",
       "      <td>0.066842</td>\n",
       "      <td>0.319699</td>\n",
       "      <td>0.613459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74657</th>\n",
       "      <td>0.466657</td>\n",
       "      <td>0.423641</td>\n",
       "      <td>0.109702</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74658</th>\n",
       "      <td>0.049319</td>\n",
       "      <td>0.345702</td>\n",
       "      <td>0.604979</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>74659 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              0         1         2\n",
       "0      0.108394  0.381140  0.510467\n",
       "1      0.270882  0.391294  0.337824\n",
       "2      0.041510  0.093142  0.865347\n",
       "3      0.073502  0.339326  0.587173\n",
       "4      0.079575  0.269224  0.651201\n",
       "5      0.010740  0.048093  0.941167\n",
       "6      0.037427  0.327204  0.635369\n",
       "7      0.138476  0.528981  0.332543\n",
       "8      0.087125  0.379153  0.533722\n",
       "9      0.042589  0.292906  0.664505\n",
       "10     0.008407  0.046131  0.945462\n",
       "11     0.064195  0.449537  0.486268\n",
       "12     0.051024  0.322425  0.626550\n",
       "13     0.015045  0.043744  0.941211\n",
       "14     0.012894  0.090949  0.896157\n",
       "15     0.011549  0.126299  0.862152\n",
       "16     0.122259  0.418676  0.459065\n",
       "17     0.001107  0.010857  0.988036\n",
       "18     0.017104  0.090152  0.892744\n",
       "19     0.120784  0.438369  0.440847\n",
       "20     0.052008  0.285773  0.662220\n",
       "21     0.021187  0.145241  0.833572\n",
       "22     0.088418  0.324578  0.587004\n",
       "23     0.291211  0.476145  0.232644\n",
       "24     0.011079  0.202362  0.786559\n",
       "25     0.167680  0.578880  0.253440\n",
       "26     0.022055  0.158018  0.819928\n",
       "27     0.279957  0.412514  0.307529\n",
       "28     0.061369  0.327278  0.611353\n",
       "29     0.141482  0.333554  0.524964\n",
       "...         ...       ...       ...\n",
       "74629  0.177090  0.415340  0.407570\n",
       "74630  0.186521  0.431544  0.381936\n",
       "74631  0.080366  0.285423  0.634211\n",
       "74632  0.010713  0.118422  0.870864\n",
       "74633  0.010728  0.184845  0.804427\n",
       "74634  0.008012  0.058147  0.933841\n",
       "74635  0.082899  0.209124  0.707976\n",
       "74636  0.003951  0.026332  0.969717\n",
       "74637  0.100112  0.335266  0.564622\n",
       "74638  0.026907  0.103460  0.869634\n",
       "74639  0.012421  0.035331  0.952249\n",
       "74640  0.004457  0.027829  0.967714\n",
       "74641  0.176184  0.360439  0.463377\n",
       "74642  0.043851  0.229294  0.726855\n",
       "74643  0.028191  0.333683  0.638126\n",
       "74644  0.006335  0.076253  0.917412\n",
       "74645  0.405173  0.416341  0.178487\n",
       "74646  0.020205  0.189699  0.790097\n",
       "74647  0.088749  0.330310  0.580940\n",
       "74648  0.133337  0.481995  0.384668\n",
       "74649  0.267125  0.545521  0.187354\n",
       "74650  0.380346  0.452357  0.167297\n",
       "74651  0.006397  0.042903  0.950700\n",
       "74652  0.042710  0.108668  0.848622\n",
       "74653  0.002124  0.022387  0.975489\n",
       "74654  0.037106  0.139687  0.823207\n",
       "74655  0.003689  0.023418  0.972893\n",
       "74656  0.066842  0.319699  0.613459\n",
       "74657  0.466657  0.423641  0.109702\n",
       "74658  0.049319  0.345702  0.604979\n",
       "\n",
       "[74659 rows x 3 columns]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "submission.to_csv('test_prediction_result.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
